package com.guomei.service.exam;

import com.guomei.bean.exam.IsPassDTO;
import com.guomei.bean.exam.domain.ExamAnswer;
import com.guomei.utils.Result;

import java.util.List;

/**
 * 考试答卷服务接口
 */
public interface ExamAnswerService {
    
    /**
     * 根据ID查询
     */
    ExamAnswer getById(Long id);
    
    /**
     * 查询所有
     */
    List<ExamAnswer> getAll();
    
    /**
     * 条件查询（分页）
     */
    Result<?> getByCondition(ExamAnswer examAnswer);
    
    /**
     * 新增
     */
    boolean save(ExamAnswer examAnswer);
    
    /**
     * 批量新增
     */
    boolean batchSave(List<ExamAnswer> examAnswers);
    
    /**
     * 更新
     */
    boolean update(ExamAnswer examAnswer);
    
    /**
     * 根据ID删除
     */
    boolean removeById(Long id);
    
    /**
     * 批量删除
     */
    boolean batchRemove(List<Long> ids);
    
    /**
     * 根据考试ID查询
     */
    List<ExamAnswer> getByExamId(Long examId);
    
    /**
     * 根据用户ID查询
     */
    List<ExamAnswer> getByUserId(Long userId);
    
    /**
     * 根据报名ID查询
     */
    List<ExamAnswer> getByEnrollId(Long enrollId);
    
    /**
     * 根据考试ID和用户ID查询
     */
    ExamAnswer getByExamIdAndUserId(Long examId, Long userId);
    
    /**
     * 根据报名ID和用户ID查询
     */
    ExamAnswer getByEnrollIdAndUserId(Long enrollId, Long userId);
    
    /**
     * 根据状态查询
     */
    List<ExamAnswer> getByStatus(Short status);
    
    /**
     * 根据审核人ID查询
     */
    List<ExamAnswer> getByReviewUserId(Long reviewUserId);
    
    /**
     * 根据审核结果查询
     */
    List<ExamAnswer> getByReviewResult(Short reviewResult);
    
    /**
     * 根据考试ID删除
     */
    boolean removeByExamId(Long examId);
    
    /**
     * 根据用户ID删除
     */
    boolean removeByUserId(Long userId);
    
    /**
     * 根据报名ID删除
     */
    boolean removeByEnrollId(Long enrollId);
    
    /**
     * 统计用户答卷数量
     */
    int countByUserId(Long userId);
    
    /**
     * 统计考试答卷数量
     */
    int countByExamId(Long examId);
    
    /**
     * 统计待审核答卷数量
     */
    int countByStatus(Short status);
    
    /**
     * 开始考试
     */
    Result<?> startExam(Long examId, Long enrollId, Long userId);
    
    /**
     * 提交答卷
     */
    Result<?> submitAnswer(Long answerId, Long userId);
    
    /**
     * 审核答卷
     */
    Result<?> reviewAnswer(Long answerId, Long reviewUserId, Short reviewResult, String reviewRemark);
    
    /**
     * 获取答卷详情
     */
    Result<?> getAnswerDetail(Long answerId);

    /**
     * 主观题评分审核（批量传入各题得分），并判定客观/主观是否达60分，更新答卷状态
     */
    Result<?> reviewSubjectiveScores(com.guomei.bean.curse.AnswerReviewDTO reviewDTO);

    Result<?> selectIs(List<IsPassDTO> isPassDTOList);
}
